#-*-coding:utf-8-*-
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side, Font, Alignment
import os,glob,shutil
from openpyxl.styles import numbers
import logging.config


if os.path.exists("final"):
    # shutil.move('explay','./final')
    # os.chdir("final") 
    pass  
else:
    os.mkdir("final")
    # shutil.move('explay','final')
logfile_path = "./final/explay"
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

# id_simple_format = '[%(levelname)s][%(asctime)s]%(message)s'
id_simple_format = '[%(asctime)s]%(message)s'
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
        'id_simple':{
            'format':id_simple_format
        },
    },
    'filters': {},
    'handlers': {
        #打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'id_simple'
        },
        #打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'id_simple',
            'filename': logfile_path,  # 日志文件
            'maxBytes': 1024*1024*5,  # 日志大小 5M
            'backupCount': 5, #日志文件最大个数
            'encoding': 'utf-8',  # 日志文件的编码
        },
    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置
        'explay': {
            'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上，即log数据既写入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上（更高level的logger）传递
        },
    },
}
logging.config.dictConfig(LOGGING_DIC)
# logging.getLogger("explay").debug("测试")



'''
以列表形式返回指定目录下的xlsx文件

'''
def file_list(path):
    # file_list=os.listdir(path)
    file_list=glob.glob('*.xlsx')
    # for file in file_list:
        # if os.path.isdir(file):
            # file_list.remove(file)
            # if os.path.isfile(file):
            # str1=os.path.dirname(file)
            # if file==glob.glob('*.exe') or file==glob.glob('*.py'):
        # if file==glob.glob('*.xlsx'):
        #     file_list=exlist.extend(file)
    return file_list
'''
参数：Excel文件名，默认读取激活sheet
以列表形式按行返回Excel行列表
'''
def read_excel(filename):
    wb=load_workbook(filename)
    # stnames=wb.sheetnames
    ws=wb.active
    rows=ws.max_row
    columns=ws.max_column
    total_list=[]
    for r in range(1,rows+1):
        row_list=[]
        for c in range(1,columns+1):
            row_list.append(ws.cell(r,c).value)
        total_list.append(row_list)
    return total_list
    wb.close()
    # print(row_list)

'''
filename:文件名
data_list:二维列表

'''
def write_excel(filename,data_list):
    wb=Workbook()
    ws = wb.active
    for row in data_list:
        # print(row)
        ws.append(row)
        # logging.getLogger("explay").debug(row)
    print(f'文件写入完成，一共{len(data_list)}行')
    
    # for m in range(len(data_list)):
    #     ws.append(data_list[m])
    # for r in range(len(data_list)):
    #     # print(data_list)
    #     for c in range(len(data_list[0])):
    #         ws.cell(r+1,c+1).value=data_list[r][c]
    wb.save(filename)

'''
设置xlsx文件格式
filename:文件名
'''
def set_style(filename):
    print('开始设置xlsx格式')
    wb=load_workbook(filename)
    ws = wb.active
    rows=ws.max_row
    columns=ws.max_column
    font = Font(size=11, bold=False, color="1874CD")   #设置字体、颜色、加粗
    thin = Side(border_style="thin", color="000000")
    border = Border(top=thin, left=thin, right=thin, bottom=thin)  #设置表格边框
    for r in range(1,rows+1):
        for c in range(1,columns+1):
            ws.cell(r,c).font=font
            ws.cell(r,c).border=border
            ws.cell(r,c).alignment=Alignment(horizontal='center', vertical='center',wrapText=True)   
            #horizontal为左右对齐方式，vertical指的是上下对齐的方式。center表示居中,wrapText=True表示单元格自动换行
            # ws.cell(r,c).number_format='General'
    ws.column_dimensions['H'].width = 40.0      #设置列宽
    ws.column_dimensions['G'].width = 12.0
    ws.column_dimensions['J'].width = 12.0
    ws.column_dimensions['D'].width=20.0
    ws.column_dimensions['F'].width=13.0
    ws.column_dimensions['C'].width=12.0
    ws.column_dimensions['A'].width=8.0
    # ws.row_dimensions[1].height = 40   #设置行高
    for row in ws.rows:
        # for cell in list(row)[6]:
        # print(list(row)[6].value)
        list(row)[6].number_format='yyyy/mm/dd'     #设置时间样式
        list(row)[9].number_format='yyyy/mm/dd'
    #     for cell in row:
    #         print(cell.value)
    # ws.cell(2,'J').number_format=numbers.FORMAT_DATE_XLSX15
    #     ws.cell(r,'G').number_format='yyyy-mm-dd'
    wb.save(filename)

files=file_list("./")
# print(files)
# print("需要合并的Excel文件如下：")
logging.getLogger("explay").debug("需要合并的Excel文件如下：")  #将文本提示信息写入log文件
for i in range(len(files)):
    # print(files[i])
    logging.getLogger("explay").debug(files[i])                #将需要合并的xlsx文件目录写入log文件

    
i=len(files)
logging.getLogger("explay").debug(f'一共合并了{i}个xlsx文件。')   #提示本次合并了多少个xlsx文件，以备后续查询
file_first=read_excel(files[0])
# print(s)
head=file_first[2]  #读取表头
# print(head)
data=[]
data.append(head)    #将表头信息添加进列表中
# print(data)
for j in range(0,i):
    data.extend(read_excel(files[j])[3:])    #将合并的xlsx信息，切片前三行后面的内容
# print(data)

os.chdir("final")

write_excel('返修表.xlsx',data)
set_style('返修表.xlsx')


